<?php

abstract class EtapaDao extends Dao {

   abstract public function encontrarTodosPersonasEtapa(CriterioDeBusqueda $criterioDeBusqueda);
   abstract public function encontrarTodosSinEtapa(CriterioDeBusqueda $criterioDeBusqueda);
   abstract public function encontrarTodosVivencias(PersonaEtapa $personaEtapa,Vivencia $vivencia);

   protected function crearConsultaPersonaEtapa(CriterioDeBusqueda $criterioDeBusqueda){

       $q = Doctrine_Query::create();
       $q->from('PersonaEtapa persona_etapa');
       $q->leftJoin('persona_etapa.Persona persona');
       $q->leftJoin('persona.UnidadPersona unidad_persona');



       if ($criterioDeBusqueda->getLimite() > 0){
       	$q->limit($criterioDeBusqueda->getLimite());
       }

       $comparacion = $criterioDeBusqueda->getCriteriosDeBusquedaComparacion();
       foreach ($criterioDeBusqueda->getCriteriosDeBusqueda() as $campo => $valor) {
            $where = $campo." ".$comparacion[$campo]." '".$valor."'";
            $q->addWhere($where);
       }

       foreach ($criterioDeBusqueda->getCriteriosDeOrden() as $campo => $valor) {
            $order = $campo." ".$valor."";
            $q->addOrderBy($order);
       }

       return $q;

   }



   protected function crearConsultaSinEtapa(CriterioDeBusqueda $criterioDeBusqueda){

       $q = Doctrine_Query::create();
       $q->from('UnidadPersona unidad_persona');
       $q->leftJoin('unidad_persona.Persona persona');

       //Los que no tengan etapas.
       $q->addWhere('persona.id NOT IN (SELECT pe.persona_id FROM PersonaEtapa pe)');

       if ($criterioDeBusqueda->getLimite() > 0){
       	$q->limit($criterioDeBusqueda->getLimite());
       }

       $comparacion = $criterioDeBusqueda->getCriteriosDeBusquedaComparacion();
       foreach ($criterioDeBusqueda->getCriteriosDeBusqueda() as $campo => $valor) {
            $where = $campo." ".$comparacion[$campo]." '".$valor."'";
            $q->addWhere($where);
       }

       foreach ($criterioDeBusqueda->getCriteriosDeOrden() as $campo => $valor) {
            $order = $campo." ".$valor."";
            $q->addOrderBy($order);
       }

       return $q;

   }

   protected function crearConsultaObjetivos(CriterioDeBusqueda $criterioDeBusqueda){

       $q = Doctrine_Query::create();

       $q->from('ObjetivoEducativo');

       $q = $this->criteriosConsulta($criterioDeBusqueda,$q);

       return $q;


   }

}
?>